package co.edu.udistrital.audiomixer.entidad;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import co.edu.udistrital.audiomixer.comun.IEntidad;

/**
 * A representation of the model object '<em><b>Usuario</b></em>'. <!--
 * begin-user-doc --> <!-- end-user-doc -->
 * 
 * @generated
 */
@Entity(name = "Usuario")
public class Usuario implements IEntidad, Serializable {

	/**
	 * @generated
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	@Id()
	private int id = 0;

	/**
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	@Basic()
	private String identificacion = null;

	/**
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	@Basic()
	private String password = null;

	/**
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	@ManyToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST,
			CascadeType.REFRESH })
	@JoinTable(joinColumns = { @JoinColumn(columnDefinition = "", name = "usuario") }, inverseJoinColumns = { @JoinColumn(name = "proyecto") }, name = "proyecto_usuariosproyecto")
	private List<Proyecto> proyectos = new ArrayList<Proyecto>();

	/**
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	@Basic()
	private String nombre = null;

	/**
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	@Basic()
	private String correo = null;

	/**
	 * Returns the value of '<em><b>id</b></em>' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the value of '<em><b>id</b></em>' feature
	 * @generated
	 */
	public int getId() {
		return id;
	}

	/**
	 * Sets the '{@link Usuario#getId() <em>id</em>}' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @param newId
	 *            the new value of the '{@link Usuario#getId() id}' feature.
	 * @generated
	 */
	public void setId(int newId) {
		id = newId;
	}

	/**
	 * Returns the value of '<em><b>identificacion</b></em>' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the value of '<em><b>identificacion</b></em>' feature
	 * @generated
	 */
	public String getIdentificacion() {
		return identificacion;
	}

	/**
	 * Sets the '{@link Usuario#getIdentificacion() <em>identificacion</em>}'
	 * feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @param newIdentificacion
	 *            the new value of the '{@link Usuario#getIdentificacion()
	 *            identificacion}' feature.
	 * @generated
	 */
	public void setIdentificacion(String newIdentificacion) {
		identificacion = newIdentificacion;
	}

	/**
	 * Returns the value of '<em><b>password</b></em>' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the value of '<em><b>password</b></em>' feature
	 * @generated
	 */
	public String getPassword() {
		return password;
	}

	/**
	 * Sets the '{@link Usuario#getPassword() <em>password</em>}' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @param newPassword
	 *            the new value of the '{@link Usuario#getPassword() password}'
	 *            feature.
	 * @generated
	 */
	public void setPassword(String newPassword) {
		password = newPassword;
	}

	/**
	 * Returns the value of '<em><b>proyectos</b></em>' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the value of '<em><b>proyectos</b></em>' feature
	 * @generated
	 */
	public List<Proyecto> getProyectos() {
		return proyectos;
	}

	/**
	 * Adds to the <em>proyectos</em> feature.
	 * 
	 * @param proyectosValue
	 *            the value to add
	 * 
	 * @generated
	 */
	public void addToProyectos(Proyecto proyectosValue) {
		if (!proyectos.contains(proyectosValue)) {
			proyectos.add(proyectosValue);
		}
	}

	/**
	 * Removes from the <em>proyectos</em> feature.
	 * 
	 * @param proyectosValue
	 *            the value to remove
	 * 
	 * @generated
	 */
	public void removeFromProyectos(Proyecto proyectosValue) {
		if (proyectos.contains(proyectosValue)) {
			proyectos.remove(proyectosValue);
		}
	}

	/**
	 * Clears the <em>proyectos</em> feature.
	 * 
	 * @generated
	 */
	public void clearProyectos() {
		while (!proyectos.isEmpty()) {
			removeFromProyectos(proyectos.iterator().next());
		}
	}

	/**
	 * Sets the '{@link Usuario#getProyectos() <em>proyectos</em>}' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @param newProyectos
	 *            the new value of the '{@link Usuario#getProyectos() proyectos}
	 *            ' feature.
	 * @generated
	 */
	public void setProyectos(List<Proyecto> newProyectos) {
		proyectos = newProyectos;
	}

	/**
	 * Returns the value of '<em><b>nombre</b></em>' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the value of '<em><b>nombre</b></em>' feature
	 * @generated
	 */
	public String getNombre() {
		return nombre;
	}

	/**
	 * Sets the '{@link Usuario#getNombre() <em>nombre</em>}' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @param newNombre
	 *            the new value of the '{@link Usuario#getNombre() nombre}'
	 *            feature.
	 * @generated
	 */
	public void setNombre(String newNombre) {
		nombre = newNombre;
	}

	/**
	 * Returns the value of '<em><b>correo</b></em>' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @return the value of '<em><b>correo</b></em>' feature
	 * @generated
	 */
	public String getCorreo() {
		return correo;
	}

	/**
	 * Sets the '{@link Usuario#getCorreo() <em>correo</em>}' feature.
	 * 
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @param newCorreo
	 *            the new value of the '{@link Usuario#getCorreo() correo}'
	 *            feature.
	 * @generated
	 */
	public void setCorreo(String newCorreo) {
		correo = newCorreo;
	}

	/**
	 * A toString method which prints the values of all EAttributes of this
	 * instance. <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
	@Override
	public String toString() {
		return "Usuario " + " [id: " + getId() + "]" + " [identificacion: "
				+ getIdentificacion() + "]" + " [password: " + getPassword()
				+ "]" + " [nombre: " + getNombre() + "]" + " [correo: "
				+ getCorreo() + "]";
	}
}
